<?php
/**
 * 
 */

namespace App\Common\Cla;

use App\Common as com;

class ClaBase extends com\Base {

	/**
	 * 兼容旧代码，新写的代码不允许使用
	 */
	use com\Cla\ClaBase\Traits\GoPool;

	public function __construct(){
		parent::__construct();
	}

	public function __destruct(  ) {}
	
	/**
	 * 创建新对象
	 * @return $this 初始化的类
	 */
//	public static function newClass( ):self {
//		$this_class_name = static::class;
//		return new $this_class_name( ...func_get_args() );	// func_get_args()返回全部参数的值,类型是数组
//	}
	
	/**
	 * 初始化本类(如类抛出异常，则将异常转换为错误码并返回)
	 * @return int|$this [obj]初始化的类 [int]错误码
	 */
//	public static function newClassTry() {
//		$args = func_get_args();
//		return com\Lib\Err\Exception\Throw_::callFunTry( function() use ( $args ) {
//			$this_class_name = static::class;
//			return new $this_class_name( ...$args );	// func_get_args()返回全部参数的值,类型是数组
//		} );
//	}

	/**
	 * 弱引用池
	 * 注意：与 goWeakReferencePoolOrObj 的区别为本方法会将所有对象自动转为弱引用)
	 * @return com\Lib\Com\WeakReferencePool
	 * @throws com\Lib\Err\BaseException\Throw_
	 * @throws com\Lib\Err\Exception
	 */
	protected function goWeakReferencePool(  ):com\Lib\Com\WeakReferencePool {
		return $this->goPool( __FUNCTION__, function(){
			return com\Lib\Com\WeakReferencePool::make();
		} );
	}

	/**
	 * 弱引用池
	 * 注意：与 goWeakReferencePool 的区别为本方法为支持弱引用和对象存储池)
	 * @return com\Lib\Com\WeakReferencePoolOrObj
	 * @throws com\Lib\Err\BaseException\Throw_
	 * @throws com\Lib\Err\Exception
	 */
	protected function goWeakReferencePoolOrObj(  ):com\Lib\Com\WeakReferencePoolOrObj {
		return $this->goPool( __FUNCTION__, function(){
			return com\Lib\Com\WeakReferencePoolOrObj::make();
		} );
	}

}
